package dao;

import java.util.ArrayList;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.exception.JDBCConnectionException;

import dominio.Socio;

import excepciones.DAOExcepcion;

public class DaoSocio {

	private static final String SQL_LISTAR_SOCIO = "From Socio";
	private static final String SQL_LISTAR_SOCIO_EMAIL = "From Socio as socio Where socio.esncard = '";
	
	private static Session sesion = null; // Hibernate Session
	private static Transaction tx = null; // Hibernate Transaction
	
	public DaoSocio() {
		
	}

	public ArrayList ListarSocios() throws DAOExcepcion{		
		try {
			sesion = UtilidadHibernate.getSessionFactory().openSession();
			sesion.beginTransaction();
			ArrayList ListaSocios = (ArrayList) sesion.createQuery(SQL_LISTAR_SOCIO).list();
			sesion.getTransaction().commit();
			sesion.close();
			return ListaSocios;
		} 
		catch (JDBCConnectionException e){  // no puede conectar con la bd, error grave.
			System.out.println("Error al conectar con la base de datos " + e + "\n");
		}
		catch (HibernateException e) {
			tx.rollback();
			throw new DAOExcepcion(e);
		} 
		return null;
	}
	
	public static void anadirSocio (Socio socio) throws DAOExcepcion {
		try {
			sesion = UtilidadHibernate.getSessionFactory().openSession();
			tx = sesion.beginTransaction();
			sesion.save(socio);
			tx.commit();
		} 
		catch (JDBCConnectionException e){  // no puede conectar con la bd, error grave.
			System.out.println("Error al conectar con la base de datos " + e + "\n");
		}
		catch (HibernateException e) {
			tx.rollback();
			throw new DAOExcepcion(e);
		} 
		return;
	}
	
	public static void actualizarSocio (Socio socio) throws DAOExcepcion {
		try {
			sesion = UtilidadHibernate.getSessionFactory().openSession();
			tx = sesion.beginTransaction();
			sesion.update(socio);
			tx.commit();
		} 
		catch (JDBCConnectionException e){  // no puede conectar con la bd, error grave.
			System.out.println("Error al conectar con la base de datos " + e + "\n");
		}
		catch (HibernateException e) {
			tx.rollback();
			throw new DAOExcepcion(e);
		} 
		return;
	}
	
	public static void eliminarSocio (Socio socio) throws DAOExcepcion {
		try {
			sesion = UtilidadHibernate.getSessionFactory().openSession();
			tx = sesion.beginTransaction();
			sesion.delete(socio);
			tx.commit();
		} 
		catch (JDBCConnectionException e){  // no puede conectar con la bd, error grave.
			System.out.println("Error al conectar con la base de datos " + e + "\n");
		}
		catch (HibernateException e) {
			tx.rollback();
			throw new DAOExcepcion(e);
		} 
		return;
	}

	public ArrayList recuperarSocio(String esncard) throws DAOExcepcion {
		try {
			sesion = UtilidadHibernate.getSessionFactory().openSession();
			sesion.beginTransaction();
			ArrayList ListaSocios = (ArrayList) sesion.createQuery(SQL_LISTAR_SOCIO_EMAIL+esncard+"'").list();
			sesion.getTransaction().commit();
			sesion.close();
			return ListaSocios;
		} 
		catch (JDBCConnectionException e){  // no puede conectar con la bd, error grave.
			System.out.println("Error al conectar con la base de datos " + e + "\n");
		}
		catch (HibernateException e) {
			tx.rollback();
			throw new DAOExcepcion(e);
		} 
		return null;
	}
}
